home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI3 / LEZIONE7c.s < prev    next >
Text File  |  1994-11-28  |  8KB  |  240 lines

  1.  
  2. ; Lezione7c.s    UNO SPRITE MOSSO ORIZZONTALMENTE USANDO UNA TABELLA DI VALORI
  3. ;        (ossia di coordinate orizzontali) PRESTABILITI.
  4.  
  5.  
  6.     SECTION    CiriCop,CODE
  7.  
  8. Inizio:
  9.     move.l    4.w,a6        ; Execbase
  10.     jsr    -$78(a6)    ; Disable
  11.     lea    GfxName(PC),a1    ; Nome lib
  12.     jsr    -$198(a6)    ; OpenLibrary
  13.     move.l    d0,GfxBase
  14.     move.l    d0,a6
  15.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  16.  
  17. ;    Puntiamo la PIC "vuota"
  18.  
  19.     MOVE.L    #BITPLANE,d0    ; dove puntare
  20.     LEA    BPLPOINTERS,A1    ; puntatori COP
  21.     move.w    d0,6(a1)
  22.     swap    d0
  23.     move.w    d0,2(a1)
  24.  
  25. ;    Puntiamo lo sprite
  26.  
  27.     MOVE.L    #MIOSPRITE,d0        ; indirizzo dello sprite in d0
  28.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  29.     move.w    d0,6(a1)
  30.     swap    d0
  31.     move.w    d0,2(a1)
  32.  
  33.     move.l    #COPPERLIST,$dff080    ; nostra COP
  34.     move.w    d0,$dff088        ; START COP
  35.     move.w    #0,$dff1fc        ; NO AGA!
  36.     move.w    #$c00,$dff106        ; NO AGA!
  37.  
  38. mouse:
  39.     cmpi.b    #$ff,$dff006    ; Linea 255?
  40.     bne.s    mouse
  41.  
  42.     bsr.s    MuoviSprite    ; Muovi lo sprite 0 orizzontalmente
  43.  
  44. Aspetta:
  45.     cmpi.b    #$ff,$dff006    ; linea 255?
  46.     beq.s    Aspetta
  47.  
  48.     btst    #6,$bfe001    ; mouse premuto?
  49.     bne.s    mouse
  50.  
  51.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  52.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  53.  
  54.     move.l    4.w,a6
  55.     jsr    -$7e(a6)    ; Enable
  56.     move.l    gfxbase(PC),a1
  57.     jsr    -$19e(a6)    ; Closelibrary
  58.     rts
  59.  
  60. ;    Dati
  61.  
  62. GfxName:
  63.     dc.b    "graphics.library",0,0
  64.  
  65. GfxBase:
  66.     dc.l    0
  67.  
  68. OldCop:
  69.     dc.l    0
  70.  
  71. ; Questa routine sposta  lo sprite agendo sul suo byte HSTART, ossia
  72. ; il byte della sua posizione X, immettendoci delle coordinate gia' stabilite
  73. ; nella tabella TABX. Agendo solo su HSTART, lo scorrimento e' a scatti di 2
  74. ; pixel ogni volta e non di 1 pixel alla volta, per cui e' leggermente
  75. ; "scattoso" specialmente nei rallentamenti. Renderemo piu' fluido lo scroll
  76. ; orizzontale in seguito, rendendolo fedele al singolo pixel.
  77.  
  78. MuoviSprite:
  79.     ADDQ.L    #1,TABXPOINT     ; Fai puntare al byte successivo
  80.     MOVE.L    TABXPOINT(PC),A0 ; indirizzo contenuto in long TABXPOINT
  81.                  ; copiato in a0
  82.     CMP.L    #FINETABX-1,A0  ; Siamo all'ultima longword della TAB?
  83.     BNE.S    NOBSTART    ; non ancora? allora continua
  84.     MOVE.L    #TABX-1,TABXPOINT ; Riparti a puntare dalla prima long
  85. NOBSTART:
  86.     MOVE.b    (A0),HSTART    ; copia il byte dalla tabella ad HSTART
  87.     rts
  88.  
  89. TABXPOINT:
  90.     dc.l    TABX-1        ; NOTA: i valori della tabella qua sono bytes,
  91.                 ; dunque lavoriamo con un ADDQ.L #1,TABXPOINT
  92.                 ; e non #2 come per quando sono word o con #4
  93.                 ; come quando sono longword.
  94.  
  95. ; Tabella con coordinate X dello sprite precalcolate.
  96. ; Da notare che la posizione X per far entrare lo sprite nella finestra video
  97. ; deve essere compresa tra $40 e $d8, infatti nella tabella ci sono byte non
  98. ; piu' grandi di $d8 e non piu' piccoli di $40.
  99.  
  100. TABX:
  101.     dc.b    $41,$43,$46,$48,$4A,$4C,$4F,$51,$53,$55,$58,$5A ; 200 valori
  102.     dc.b    $5C,$5E,$61,$63,$65,$67,$69,$6B,$6E,$70,$72,$74
  103.     dc.b    $76,$78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C
  104.     dc.b    $8E,$90,$92,$94,$96,$97,$99,$9B,$9D,$9E,$A0,$A2
  105.     dc.b    $A3,$A5,$A7,$A8,$AA,$AB,$AD,$AE,$B0,$B1,$B2,$B4
  106.     dc.b    $B5,$B6,$B8,$B9,$BA,$BB,$BD,$BE,$BF,$C0,$C1,$C2
  107.     dc.b    $C3,$C4,$C5,$C5,$C6,$C7,$C8,$C9,$C9,$CA,$CB,$CB
  108.     dc.b    $CC,$CC,$CD,$CD,$CE,$CE,$CE,$CF,$CF,$CF,$CF,$D0
  109.     dc.b    $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0,$CF,$CF,$CF
  110.     dc.b    $CF,$CE,$CE,$CE,$CD,$CD,$CC,$CC,$CB,$CB,$CA,$C9
  111.     dc.b    $C9,$C8,$C7,$C6,$C5,$C5,$C4,$C3,$C2,$C1,$C0,$BF
  112.     dc.b    $BE,$BD,$BB,$BA,$B9,$B8,$B6,$B5,$B4,$B2,$B1,$B0
  113.     dc.b    $AE,$AD,$AB,$AA,$A8,$A7,$A5,$A3,$A2,$A0,$9E,$9D
  114.     dc.b    $9B,$99,$97,$96,$94,$92,$90,$8E,$8C,$8A,$88,$86
  115.     dc.b    $84,$82,$80,$7E,$7C,$7A,$78,$76,$74,$72,$70,$6E
  116.     dc.b    $6B,$69,$67,$65,$63,$61,$5E,$5C,$5A,$58,$55,$53
  117.     dc.b    $51,$4F,$4C,$4A,$48,$46,$43,$41
  118. FINETABX:
  119.  
  120.  
  121.  
  122.     SECTION    GRAPHIC,DATA_C
  123.  
  124. COPPERLIST:
  125. SpritePointers:
  126.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  127.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  128.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  129.     dc.w    $13e,0
  130.  
  131.     dc.w    $8E,$2c81    ; DiwStrt
  132.     dc.w    $90,$2cc1    ; DiwStop
  133.     dc.w    $92,$38        ; DdfStart
  134.     dc.w    $94,$d0        ; DdfStop
  135.     dc.w    $102,0        ; BplCon1
  136.     dc.w    $104,0        ; BplCon2
  137.     dc.w    $108,0        ; Bpl1Mod
  138.     dc.w    $10a,0        ; Bpl2Mod
  139.  
  140.             ; 5432109876543210
  141.     dc.w    $100,%0001001000000000    ; bit 12 acceso!! 1 bitplane lowres
  142.  
  143. BPLPOINTERS:
  144.     dc.w $e0,0,$e2,0    ;primo     bitplane
  145.  
  146.     dc.w    $180,$000    ; color0    ; sfondo nero
  147.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  148.                         ; in questo caso e' vuoto,
  149.                         ; per cui non compare.
  150.  
  151.     dc.w    $1A2,$F00    ; color17, ossia COLOR1 dello sprite0 - ROSSO
  152.     dc.w    $1A4,$0F0    ; color18, ossia COLOR2 dello sprite0 - VERDE
  153.     dc.w    $1A6,$FF0    ; color19, ossia COLOR3 dello sprite0 - GIALLO
  154.  
  155.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  156.  
  157.  
  158. ; ************ Ecco lo sprite: OVVIAMENTE deve essere in CHIP RAM! ************
  159.  
  160. MIOSPRITE:        ; lunghezza 13 linee
  161. VSTART:
  162.     dc.b $50    ; Posizione verticale di inizio sprite (da $2c a $f2)
  163. HSTART:
  164.     dc.b $90    ; Posizione orizzontale di inizio sprite (da $40 a $d8)
  165. VSTOP:
  166.     dc.b $5d    ; $50+13=$5d    ; posizione verticale di fine sprite
  167.     dc.b $00
  168.  dc.w    %0000000000000000,%0000110000110000 ; Formato binario per modifiche
  169.  dc.w    %0000000000000000,%0000011001100000
  170.  dc.w    %0000000000000000,%0000001001000000
  171.  dc.w    %0000000110000000,%0011000110001100 ;BINARIO 00=COLORE 0 (TRASPARENTE)
  172.  dc.w    %0000011111100000,%0110011111100110 ;BINARIO 10=COLORE 1 (ROSSO)
  173.  dc.w    %0000011111100000,%1100100110010011 ;BINARIO 01=COLORE 2 (VERDE)
  174.  dc.w    %0000110110110000,%1111100110011111 ;BINARIO 11=COLORE 3 (GIALLO)
  175.  dc.w    %0000011111100000,%0000011111100000
  176.  dc.w    %0000011111100000,%0001111001111000
  177.  dc.w    %0000001111000000,%0011101111011100
  178.  dc.w    %0000000110000000,%0011000110001100
  179.  dc.w    %0000000000000000,%1111000000001111
  180.  dc.w    %0000000000000000,%1111000000001111
  181.  dc.w    0,0    ; 2 word azzerate definiscono la fine dello sprite.
  182.  
  183.  
  184.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  185.                     ; perche' per vedere gli sprite
  186.                     ; e' necessario che ci siano bitplanes
  187.                     ; abilitati
  188. BITPLANE:
  189.     ds.b    40*256        ; bitplane azzerato lowres
  190.  
  191.     end
  192.  
  193. I movimenti complessi e realistici si fanno con le tabelle!
  194. Provate a sostituire la tabella corrente con questa, ed invertirete il rimbalzo
  195. dello sprite. (Amiga+b+c+i per copiare), (amiga+b+x per cancellare un pezzo)
  196.  
  197. TABX:
  198.     dc.b    $CF,$CD,$CA,$C8,$C6,$C4,$C1,$BF,$BD,$BB,$B8,$B6 ; 200 valori
  199.     dc.b    $B4,$B2,$AF,$AD,$AB,$A9,$A7,$A5,$A2,$A0,$9E,$9C
  200.     dc.b    $9A,$98,$96,$94,$92,$90,$8E,$8C,$8A,$88,$86,$84
  201.     dc.b    $82,$80,$7E,$7C,$7A,$79,$77,$75,$73,$72,$70,$6E
  202.     dc.b    $6D,$6B,$69,$68,$66,$65,$63,$62,$60,$5F,$5E,$5C
  203.     dc.b    $5B,$5A,$58,$57,$56,$55,$53,$52,$51,$50,$4F,$4E
  204.     dc.b    $4D,$4C,$4B,$4B,$4A,$49,$48,$47,$47,$46,$45,$45
  205.     dc.b    $44,$44,$43,$43,$42,$42,$42,$41,$41,$41,$41,$40
  206.     dc.b    $40,$40,$40,$40,$40,$40,$40,$40,$40,$41,$41,$41
  207.     dc.b    $41,$42,$42,$42,$43,$43,$44,$44,$45,$45,$46,$47
  208.     dc.b    $47,$48,$49,$4A,$4B,$4B,$4C,$4D,$4E,$4F,$50,$51
  209.     dc.b    $52,$53,$55,$56,$57,$58,$5A,$5B,$5C,$5E,$5F,$60
  210.     dc.b    $62,$63,$65,$66,$68,$69,$6B,$6D,$6E,$70,$72,$73
  211.     dc.b    $75,$77,$79,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A
  212.     dc.b    $8C,$8E,$90,$92,$94,$96,$98,$9A,$9C,$9E,$A0,$A2
  213.     dc.b    $A5,$A7,$A9,$AB,$AD,$AF,$B2,$B4,$B6,$B8,$BB,$BD
  214.     dc.b    $BF,$C1,$C4,$C6,$C8,$CA,$CD,$CF
  215. FINETABX:
  216.  
  217.  
  218. Ora sostituitela con questa, che fa oscillare da entrambe le parti lo sprite.
  219.  
  220. TABX:
  221.     dc.b    $91,$93,$96,$98,$9A,$9C,$9F,$A1,$A3,$A5,$A7,$A9 ; 200 valori
  222.     dc.b    $AC,$AE,$B0,$B2,$B4,$B6,$B8,$B9,$BB,$BD,$BF,$C0
  223.     dc.b    $C2,$C4,$C5,$C7,$C8,$CA,$CB,$CC,$CD,$CF,$D0,$D1
  224.     dc.b    $D2,$D3,$D3,$D4,$D5,$D5,$D6,$D7,$D7,$D7,$D8,$D8
  225.     dc.b    $D8,$D8,$D8,$D8,$D8,$D8,$D7,$D7,$D7,$D6,$D5,$D5
  226.     dc.b    $D4,$D3,$D3,$D2,$D1,$D0,$CF,$CD,$CC,$CB,$CA,$C8
  227.     dc.b    $C7,$C5,$C4,$C2,$C0,$BF,$BD,$BB,$B9,$B8,$B6,$B4
  228.     dc.b    $B2,$B0,$AE,$AC,$A9,$A7,$A5,$A3,$A1,$9F,$9C,$9A
  229.     dc.b    $98,$96,$93,$91,$8F,$8D,$8A,$88,$86,$84,$81,$7F
  230.     dc.b    $7D,$7B,$79,$77,$74,$72,$70,$6E,$6C,$6A,$68,$67
  231.     dc.b    $65,$63,$61,$60,$5E,$5C,$5B,$59,$58,$56,$55,$54
  232.     dc.b    $53,$51,$50,$4F,$4E,$4D,$4D,$4C,$4B,$4B,$4A,$49
  233.     dc.b    $49,$49,$48,$48,$48,$48,$48,$48,$48,$48,$49,$49
  234.     dc.b    $49,$4A,$4B,$4B,$4C,$4D,$4D,$4E,$4F,$50,$51,$53
  235.     dc.b    $54,$55,$56,$58,$59,$5B,$5C,$5E,$60,$61,$63,$65
  236.     dc.b    $67,$68,$6A,$6C,$6E,$70,$72,$74,$77,$79,$7B,$7D
  237.     dc.b    $7F,$81,$84,$86,$88,$8A,$8D,$8F
  238. FINETABX:
  239.  
  240.